package com.mls.guardian.appst.chain.excutor;

import com.mls.guardian.appst.chain.TaskExecutor;
import com.mls.guardian.appst.chain.TaskInvoker;
import com.mls.guardian.appst.chain.TaskResult;
import com.mls.guardian.dataobj.ModuleMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.List;

/**
 * Created by 2014-400 on 2015-11-16.
 * 1、停止tomcat服务
 * 2、war文件从备份目录复制到程序启动目录
 * 3、先删除目标目录,解压到目标目录
 * 4、复制js文件
 * 5、重启tomcat服务
 */
public class RestoreWebExcutor implements TaskExecutor {
    private static final Logger log = LoggerFactory.getLogger(RestoreJarExcutor.class);

    @Override
    public TaskResult exec(TaskInvoker invoker) {
        TaskResult result = null;
        try {
            log.info("----开始restore web----");
            List<ModuleMessage> requstModule = invoker.getModuleList();
            if (requstModule == null || requstModule.size() == 0 ||
                    "tomcat".equals(requstModule.get(0).getModuleName().toLowerCase().trim())) {
                //所有模块
                for (String item : invoker.getProject().getWebModuleList()) {
                    log.info("----restore web[{}]----", item);
                    String sourceFile = invoker.getConfig().getBackupDest() + File.separator + invoker.getProject().getProjectName() + File.separator + invoker.getVersionTag() + File.separator + item + "-1.0.war";
                    String targetFile = invoker.getConfig().getMoveDest() + File.separator + invoker.getProject().getProjectName() + item + "-1.0.war";

                    if (Files.exists(Paths.get(sourceFile))) {
                        Files.copy(Paths.get(sourceFile), Paths.get(targetFile), StandardCopyOption.REPLACE_EXISTING);
                    }
                }
            } else {
                //指定模块
                for (ModuleMessage item : requstModule) {
                    log.info("----restore web[{}]----", item.getModuleName());
                    if (item.getModuleName() != null && item.getModuleName().length() > 0) {
                        String sourceFile = invoker.getConfig().getBackupDest() + File.separator + invoker.getProject().getProjectName() + File.separator + invoker.getVersionTag() + File.separator + item.getModuleName() + "-1.0.war";
                        String targetFile = invoker.getConfig().getMoveDest() + File.separator + invoker.getProject().getProjectName() + File.separator + item.getModuleName() + "-1.0.war";

                        if (Files.exists(Paths.get(sourceFile))) {
                            Files.copy(Paths.get(sourceFile), Paths.get(targetFile), StandardCopyOption.REPLACE_EXISTING);
                        }
                    }
                }
            }


            result = new TaskResult();
            result.setSuc(true);
        } catch (Exception e) {
            result = new TaskResult();
            result.setSuc(false);
            result.setError(e.getMessage());

            e.printStackTrace();
        } finally {
            log.info("----结束restore web[{}]----", result.isSuc());
        }

        if (result.isSuc() == true) {
            return invoker.invoke();
        }

        return result;
    }
}
